#ifndef CARTASINTATICA_H_
#define CARTASINTATICA_H_

#include <string>
#include "Hash.h"
#include "Arvore.h"
#include <stack>

using namespace std;

class CartaSintatica
{
	private:
		fstream
		arquivo;

		class Identificador
		*identificador;

		class Arvore
		*tree;

		class Hash
		*tabela;

		std::stack<Identificador*>
		pilha;

		int
		nivel;

	public:
		CartaSintatica( string );
		~CartaSintatica();
		string getToken();
		class Identificador* LerToken();
		void Tipo();
		void VerificaProgram();
		/* @return void
		 * @param No* */
		void VerificaBloco( No * );
		void VerificaDeclaracao( No * );
		void VerificaVar( No * );
		void VerificaProcedure( No * );
		void VerificaParamForm( No *, std::string );
		void VerificaIf();
		void VerificaFor();
		void VerificaWhile();
		void VerificaTipo();
		void Sair();
};

#endif /*CARTASINTATICA_H_*/
